//
//  NetAPIManager.h
//  ImGuider
//
//  Created by llt on 2017/4/12.
//  Copyright © 2017年 imguider. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "Scenic.h"
#import "Weather.h"
#import "OrderModel.h"
#import "Coupon.h"
#import "Question.h"
#import "Comment.h"
#import "Raiders.h"
#import "UserInfo.h"

#import "HomeModel.h"
#import "ChargeCoinModel.h"
#import "ExpenseModel.h"
#import "Message.h"
#import "RewardMsgModel.h"
#import "RewardRecordModel.h"
#import "TicketDetailModel.h"
#import "TicketMemberInfoModel.h"
#import "TicketOrderModel.h"
#import "UploadTicketOrderModel.h"
#import "City.h"
#import "Country.h"
#import "RateMode.h"

#import "MerchantModel.h"

@interface NetAPIManager : NSObject

/**
 根据城市位置，获取推荐景点
 
 @param coordinate 城市位置
 @param block --
 */
+ (void)getRecommendScenicWithLocation:(CLLocationCoordinate2D )coordinate andBlock:(void (^)(City *city, NSError *error))block;

/**
 根据城市ID，获取推荐景点
 
 @param cityID 城市ID
 @param block --
 */

+ (void)getRecommendScenicWithCityID:(NSNumber *)cityID andBlock:(void (^)(City *city, NSError *error))block;


/**
 获取当前城市所在城市名
 
 @param block --
 */
+ (void)getGpsCityBlock:(void (^)(City *city, NSError *error))block;

/**
 获取版本号
 
 @param block 当前版本号 最低版本号 城市列表版本
 */
+ (void)getAppVersionBlock:(void (^)(id data, NSError *error))block;


/**
 获取当前城市所有景点
 
 @param cityID 城市ID
 @param start 开始页码 从0开始
 @param count 每页个数 0表示获取所有
 @param block block 第一个参数为景点数组，第二个参数为错误对象（无错误时为nil）
 */
+ (void)getAllViewsWithCity:(NSNumber *)cityID start:(NSNumber *)start count:(NSNumber *)count block:(void (^)(NSArray *viewsArray, NSError *error))block;

/**
 获取导游列表以当前城市景点排序
 
 @param cityID 城市ID
 @param start 开始页码 从0开始
 @param count 每页个数 0表示获取所有
 @param block block 第一个参数为线路数组，第二个参数为错误对象（无错误时为nil）
 */

+(void)getAllLinesBy:(NSNumber *)cityID start:(NSNumber *)start count:(NSNumber *)count block:(void (^)(NSArray *linesArray, NSError *error))block;


/**
 获取导游列表以当前城市景点排序
 
 @param cityID 城市ID
 @param start 开始页码 从0开始
 @param count 每页个数 0表示获取所有
 @param block block 第一个参数为景点数组，第二个参数为错误对象（无错误时为nil）
 */

+(void)getAllGuiderBy:(NSNumber *)cityID start:(NSNumber *)start count:(NSNumber *)count block:(void (^)(NSArray *guidersArray, NSError *error))block;

/**
 获取导游列表以当前城市景点排序
 
 @param guiderid 导游ID
 @param cityid 城市ID
 @param block --
 */
+ (void)getGuiderDetailWith:(NSString *)guiderid cityid:(NSString *)cityid block:(void (^)(GuiderModel *guider, NSError *error))block;

/**
 获取景点信息以及 景点下的导游列表
 
 @param scenicID 景点
 @param block 第一个 景点信息 第三个错误对象
 */
+ (void)getScenicGuiderListWithScenticID:(NSString *)scenicID Block:(void (^)(Scenic *scenic, NSError *error))block;


/**
 获取线路详情
 
 @param lineID --
 @param block --
 */
+ (void)getLineDetailWithLinID:(NSString *)lineID block:(void (^)(LineModel * model, NSError * error))block;

/**
 获取验证码
 
 @param countrycode 国家代码
 @param cellPhone 手机号
 @param usage 验证码用途：0注册，认证，1找回密码,2改密码
 @param block --
 */
+ (void)getCodeWithCountryCode:(NSString *)countrycode cellPhone:(NSString *)cellPhone usage:(NSInteger)usage Block:(void (^)(NSString * result, NSError * error))block;

/**
 手机号注册
 
 @param countrycode 国家代码
 @param cellPhone 手机号
 @param encode 验证码
 @param psw 密码
 @param block --
 */
+ (void)phoneRegisterWithCountryCode:(NSString *)countrycode cellPhone:(NSString *)cellPhone encode:(NSString *) encode psw:(NSString *)psw block:(void (^)(NSString * result, NSError * error))block;


/**
 手机号登录
 
 @param countrycode 国家代码
 @param cellPhone 手机号
 @param psw 密码
 @param block --
 */
+ (void)phoneLoginWithCountryCode:(NSString *)countrycode cellPhone:(NSString *)cellPhone psw:(NSString *)psw block:(void (^)(NSString * result, NSError * error))block;

/**
 第三方注册登录
 
 @param params 第三方登录参数
 @param block --
 */
+ (void)thirdRegisterType:(NSDictionary *)params block:(void (^)(NSString * result, NSError * error))block;

/**
 获取用户信息
 
 @param block --
 */
+ (void)getUserInfoWithBlock:(void (^)(NSString * result, NSError * error))block;

/**
 修改密码／重置密码
 
 @param countrycode 国家代码
 @param cellPhone 手机号
 @param psw 密码
 @param encode 验证码
 @param block --
 */
+ (void)resetPswWithCountryCode:(NSString *)countrycode cellPhone:(NSString *)cellPhone psw:(NSString *)psw encode:(NSString *)encode block:(void (^)(NSString * result, NSError * error))block;


/**
 获取上架城市
 
 @param block --
 */
+ (void)getOnlinecitiesWithBlock:(void (^)(NSArray * onlinecountry, NSError * error))block;


/**
 获取国家列表
 
 @param block --
 */
+ (void)getAllcountryWithBlock:(void (^)(NSArray * allcountry, NSError * error))block;

/**
 修改用户信息 0昵称，1头像
 
 @param needData 更改内容 头像为image
 @param type realname:用户昵称,email:邮箱地址,password:用户密码,headimg:用户头像
 @param block --
 */
+ (void)updateUserinfo:(id)needData type:(NSString *)type block:(void (^)(NSString * result, NSError * error))block ;

/**
 退出登录
 
 @param block --
 */
+ (void)logoutWithBlock:(void (^)(NSString * result, NSError * error))block;

/**
 收藏
 
 @param collectType 类型 CollectTypeRecordset : 线路,CollectTypeGuider : 导游
 @param favourid favourid
 @param block result 1收藏，0取消收藏
 */
+ (void)collectWithType:(CollectType)collectType favourid:(NSString *)favourid block:(void (^)(id result, NSError *error))block;


/**
 预下单接口
 
 @param lineid 线路ID
 @param block coin：金币数，ordernumber：订单号
 */
+ (void)preorderOrderWithLineID:(NSString *)lineid block:(void (^)(NSDictionary *result, NSError *error))block;

/**
 获取支付数据
 
 @param paymentid 商品ID
 @param couponid 优惠券ID
 @param orderid 订单ID （如果传了orderID，就是重新支付状态，不需要传订单对象）
 @param ticketModel 订单对象
 @param ordernumber 订单号 （预下单接口获得的订单号）
 @param payType 支付类型
 @param merchType 商品类型
 @param block --
 */
+ (void)getPaymentinfoWithPaymentID:(NSString *)paymentid couponid:(NSString *)couponid orderid:(NSString *)orderid ticketmodel:(UploadTicketOrderModel *)ticketModel ordernumber:(NSString *)ordernumber payType:(PayType)payType merchType:(MerchType)merchType andBlock:(void (^)(id result, NSError *error))block;

/**
 验证订单是否成功
 
 @param orderid 请求来的ID
 @param notorderid 附加信息
 @param currency 币种：CNY,USD
 @param payType 支付类型
 @param block --
 */
+ (void)verifyPaymentOrderID:(NSString*)orderid notorderid:(NSString *)notorderid currency:(NSString *)currency payType:(PayType)payType andBlock:(void (^)(id result, NSError *error))block;

/**
 获取收藏内容
 
 @param collectType 收藏类型
 @param block --
 */
+ (void)getCollectWithType:(CollectType)collectType block:(void (^)(NSArray *resultArray, NSError *error))block;

/**
 我的订单
 
 @param start --
 @param count --
 @param type 订单类型
 @param block --
 */
+ (void)getOrderStart:(NSNumber *)start count:(NSNumber *)count type:(MerchType)type Block:(void (^)(NSArray <OrderModel *>*orderArray, NSError *error))block;


/**
 问题反馈
 
 @param type 问题类型（1产品建议，2程序出错，3缺少景点）
 @param content 问题描述
 @param account 手机或邮箱
 @param block --
 */
+ (void)feedback:(NSNumber *)type content:(NSString *)content account:(NSString *)account Block:(void (^)(NSString *result, NSError *error))block;




/**
 评价
 
 @param unionid 订单id
 @param isLine 是否是线路
 @param score 评分
 @param comment 评论内容
 @param block --
 */

+ (void)evaluate:(NSString *)unionid isLine:(BOOL)isLine score:(NSNumber *)score comment:(NSString *)comment Block:(void (^)(NSString *result, NSError *error))block;

/**
 获取优惠券
 
 @param lineid 根据id 判断是否可用
 @param block --
 */
+ (void)getMycouponsWithLineid:(NSString *)lineid Block:(void (^)(NSArray <Coupon *>*couponArray, NSError *error))block;


/**
 数据打点
 
 @param params --
 */
+ (void)postPhoneData:(NSDictionary *)params;


/**
 兑换优惠券
 
 @param code code
 @param block --
 */
+ (void)redeemCouponCode:(NSString *)code Block:(void (^)(NSArray <Coupon *>*couponArray, NSString *errmsg))block;



/**
 使用优惠券
 
 @param couponid 优惠券ID
 @param block --
 */
+ (void)useCouponid:(NSString *)couponid Block:(void (^)(NSString *lineid, NSString *errmsg))block;


/**
 获取所有问题
 
 @param lineid 线路ID -- 当id为nil时，为我提问的所有问题
 @param pageno 页码
 @param pagesize 每页数量
 @param block --
 */
+ (void)getAllQuestionsWithLineID:(NSString *)lineid pageno:(NSNumber *)pageno pigesize:(NSNumber *)pagesize Block:(void (^)(NSDictionary * guiderInfo, NSArray <Question *>*questionArray, NSError *error))block;



/**
 我的提问
 
 @param block --
 */
+ (void)getMyQuestionBlock:(void (^)(NSArray <Question *>*questionArray, NSError *error))block;

/**
 获取所有评论
 
 @param lineid 线路ID
 @param isLine 是否是线路
 @param block --
 */
+ (void)getAllCommentsWithLineID:(NSString *)lineid isLine:(BOOL)isLine Block:(void (^)(NSArray<Comment *> *, LineModel *, NSError *))block ;


/**
 提问问题
 
 @param lineid 线路ID
 @param question 问题
 @param imageArray 图片数组
 @param block --
 */
+ (void)qaWithLineid:(NSString *)lineid question:(NSString *)question images:(NSArray *)imageArray Block:(void (^)(id data, NSError *error))block;


/**
 获取是否购买过
 
 @param lineid 线路ID
 @param block --
 */
+ (void)getLineBoughtStateWithLineid:(NSString *)lineid Block:(void (^)(LineModel *model, NSError *error))block;


/**
 获取当前城市的攻略列表
 
 @param cityID 城市ID
 @param start 开始页码 从0开始
 @param count 每页个数 0表示获取所有
 @param block block 第一个参数为景点数组，第二个参数为错误对象（无错误时为nil）
 */

+(void)getRaidersBy:(NSNumber *)cityID start:(NSNumber *)start count:(NSNumber *)count block:(void (^)(NSArray *raidersArray, NSError *error))block;


/**
 获取 获取所有导游列表
 
 
 @param block block 第一个参数为景点数组，第二个参数为错误对象（无错误时为nil）
 */

+(void)getAllGuidersBlock:(void (^)(NSArray *guiderArray, NSError *error))block;


/**
 提问标记为已读
 
 @param qid 问题ID
 @param block --
 */
+ (void)setMessgaeReadWithQid:(NSString *)qid Block:(void (^)(NSString *result, NSError *error))block;

/**
 次数统计
 
 @param relationid 关联ID
 @param type 1查看/2点赞/3下单/4购买/5分享/6提问/7回复
 */
+ (void)clickCountWithID:(NSString *)relationid type:(NSString *)type;


//---------------------------------V2--------------------------------------


/**
 首页数据
 
 @param block --
 */
+ (void)getHomePageWithBlock:(void (^)(HomeModel *model, NSError *error))block;

+ (void)getMoreLinesWithBlock:(void (^)(NSArray <LineModel *>*linesArray, NSError *error))block;
+ (void)getMoreCitiesWithBlock:(void (^)(NSArray <City *>*citiesArray, NSError *error))block;
+ (void)getMoreAlbumsWithBlock:(void (^)(NSArray <LineModel *>*albumsArray, NSError *error))block;
+ (void)getMoreCitysWithBlock:(void (^)(NSArray <City *>*citiesArray, NSError *error))block;


/**
 城市首页
 
 @param cid 城市ID
 @param block --
 */
+ (void)getCityDetail:(NSString *)cid block:(void (^)(City *city, NSError *error))block;


/**
 获取充值列表
 
 @param block --
 */
+ (void)getPaylistBlock:(void (^)(NSArray <ChargeCoinModel *>*paylistArray, NSError *error))block;


/**
 修改密码
 
 @param password 密码
 @param encode 验证码
 @param block --
 */
+ (void)updatepsw:(NSString *)password code:(NSString *)encode block:(void (^)(NSString *result, NSError *error))block;


/**
 手机号认证
 
 @param countrycode 国家代码
 @param cellPhone 手机号
 @param encode 验证码
 @param block --
 */
+ (void)updateCellphoneWithCountryCode:(NSString *)countrycode cellPhone:(NSString *)cellPhone encode:(NSString *)encode PassWord:(NSString *)password block:(void (^)(NSString * result, NSError * error))block;



/**
 获取充值记录
 
 @param pageno --
 @param pagesize --
 @param block --
 */
+ (void)getExpenseCalendarListWithPageno:(NSInteger)pageno pagesize:(NSInteger)pagesize Block:(void (^)(NSArray <ExpenseModel *>*expenselistArray, NSError *error))block;


/**
 我的消息
 
 @param pageno --
 @param pagesize --
 @param block --
 */
+ (void)getMessagesListWithPageno:(NSInteger)pageno pagesize:(NSInteger)pagesize Block:(void (^)(NSArray <Message *>*listArray, NSError *error))block;

/**
 
 @param keyWords  匹配关键字
 **/

+ (void)getSearchResultWithKeyWords:(NSString *)keyWords  block:(void (^)(NSArray *resultArray, NSError *error))block;


/**
 获取打赏信息
 
 @param lineid 线路ID
 @param block --
 */
+ (void)getRewardMessageWithLineid:(NSString *)lineid block:(void (^)(RewardMsgModel *model, NSError *error))block;

/**
 打赏
 
 @param lineid 线路ID
 @param coin 金额
 @param block --
 */
+ (void)rewardWithLineid:(NSString *)lineid coin:(NSString *)coin block:(void (^)(NSString *result, NSError *error))block ;


/**
 获取打赏记录
 
 @param unionid 唯一ID
 @param block --
 */
+ (void)getRewardRecordListWithUnionid:(NSString *)unionid block:(void (^)(NSArray *resultArray, NSError *error))block;



/**
 获取门票列表
 
 @param cityID 城市ID
 @param block  门票列表
 */

+ (void)getTicketListWithCityID:(NSString *)cityID  block:(void (^)(NSArray * TicketList, NSError *error))block;



/**
 获取门票详情
 
 @param ticketID 门票ID
 @param block 门票详情 model
 */
+ (void)getTicketDetailWithTicketID:(NSString *)ticketID  block:(void (^)(TicketDetailModel * ticketDetailModel , NSError *error))block;



/**
 添加出行人
 
 @param travelerModel 出行人model
 @param block 添加成功
 */
+ (void)addTravelerInformationWith:(TicketMemberInfoModel *)travelerModel block:(void (^)(TicketMemberInfoModel * ticketDetailModel , NSError *error))block;


+ (void)getTravelerListBlock:(void (^)(NSArray * TravelerList, NSError *error))block;


/**
 扫码二维码
 
 @param params 扫描的数据
 @param block --
 */
+ (void)scanWithParams:(NSDictionary *)params block:(void (^) (id result, NSError *error)) block;


/**
 收听记录
 
 @param nodeid 收听点
 */
+ (void)listenRecordWithNodeid:(NSString *)nodeid;


/**
 获取门票订单列表 详情
 
 @param orderID --
 @param block 返回 订单详情
 */
+(void)getTicketOrderRecordDetailWith:(NSString *)orderID block:(void (^)(UploadTicketOrderModel * ticketDetailModel , NSError *error))block;



/**
 
 获取我的门票
 @param block --
 */
+(void)getCompeleteTicketOrderBlock:(void (^)(NSArray * compeleteTickets, NSError *error))block;


/**
 获取所有汇率
 
 @param block --
 */
+ (void)getRateListWithBlock:(void (^)(NSArray *rateArray, NSError *error))block;


/**
 获取所有商户

 @param cityid 城市ID
 @param block --
 */
+ (void)getAllBusinessWithCityid:(NSString *)cityid block:(void (^)(NSArray *businessArray, NSError *error))block;


/**
 商户详情

 @param bid 商户ID
 @param type shop/resturant
 @param block --
 */
+ (void)getBusinessDetailID:(NSString *)bid type:(NSString *)type block:(void (^)(MerchantModel *model, NSError *error))block;

@end


